package com.dubbo.controller;

import com.dubbo.common.check.CheckUtil;
import com.dubbo.common.redis.RedisDao;
import com.dubbo.common.result.ResultInfo;
import com.dubbo.common.security.SecurityUtils;
import com.dubbo.domain.User;
import com.dubbo.service.business.refund.RefundService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 退货/换货controller
 * @author chenluqiang
 * @date 2018年12月15日 上午10:08:31 
 *
 */
@RestController
@RequestMapping("/refund")
public class RefundController {
	
	@Autowired
	private RefundService refundService;
	@Autowired
	private RedisDao redisDao;
	
	/**
	 * 售后申请页面
	 * @author chenluqiang
	 * @date 2018年12月15日 下午4:13:13 
	 * @param request
	 * @param orderId 订单id
	 * @param type 申请类型 0=退货 1=换货
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/afterSalePage")
	public Map<String,Object> afterSalePage(HttpServletRequest request,String orderId,Integer type) throws Exception{
		CheckUtil.checkOline3(request);
		//校验权限
		SecurityUtils.checkPermission("sys:refund:apply", redisDao, request.getHeader(ResultInfo.USERTOKEN));
		return refundService.applyAfterSalePage(orderId,type);
	}
	
	/**
	 * 生成 退货/换货信息
	 * @author chenluqiang
	 * @date 2018年12月15日 上午11:22:05 
	 * @param user 该用户信息
	 * @param json 退货/退款信息 json格式
	 * @return 
	 * @throws Exception 
	 */
	@PostMapping("/add")
	public Map<String,Object> add(HttpServletRequest request,String json) throws Exception{
		//获取用户信息
		User user = (User) CheckUtil.checkOline3(request);
		//校验权限
//		SecurityUtils.checkPermission("sys:refund:apply", redisDao, request.getHeader(ResultInfo.USERTOKEN));
		return refundService.addRefund(user,json);
	}
	
	/**
	 * 售后列表
	 * @author chenluqiang
	 * @date 2018年12月17日 下午2:42:37 
	 * @param type 类型 0=我的售后审核 1=我的售后申请 2=已完成
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/list")
	public Map<String,Object> list(HttpServletRequest request,Long pageStart,Long pageTotal ,Integer type) throws Exception{
		//获取用户信息
		User user = (User) CheckUtil.checkOline3(request);
		//校验权限
		SecurityUtils.checkPermission("sys:refund:query", redisDao, request.getHeader(ResultInfo.USERTOKEN));
		return refundService.refundList(user,pageStart,pageTotal,type);
	}
	
	/**
	 * 删除售后数据
	 * @author chenluqiang
	 * @date 2018年12月18日 上午9:30:36 
	 * @param request
	 * @param refundId 售后id
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/del")
	public Map<String,Object> del(HttpServletRequest request,String refundId) throws Exception{
		//获取用户信息
		User user = (User) CheckUtil.checkOline3(request);
		//校验权限
		SecurityUtils.checkPermission("sys:refund:del", redisDao, request.getHeader(ResultInfo.USERTOKEN));
		return refundService.delRefund(user,refundId);
	}
	
	/**
	 * 售后详情
	 * @author chenluqiang
	 * @date 2018年12月18日 上午11:16:15 
	 * @param request
	 * @param refundId 售后id
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/detail")
	public Map<String,Object> detail(HttpServletRequest request,String refundId) throws Exception{
		//获取用户信息
		User user = (User) CheckUtil.checkOline3(request);
		//校验权限
		SecurityUtils.checkPermission("sys:refund:see", redisDao, request.getHeader(ResultInfo.USERTOKEN));
		return refundService.refundDetail(user,refundId);
	}
	
	/**
	 * 审核售后
	 *
	 * @author lihongwu
	 * 2018年12月29日 上午11:33:39
	 * @param request
	 * @param refundId
	 * @param type   0=拒绝  1=通过
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/auditing")
	public Map<String,Object> auditing(HttpServletRequest request,String refundId,Integer type,String content) throws Exception{
		//获取用户信息
		User user = (User) CheckUtil.checkOline3(request);
		//校验权限
		SecurityUtils.checkPermission("sys:refund:edit", redisDao, request.getHeader(ResultInfo.USERTOKEN));
		return refundService.auditing(user,refundId,type,content);
	}
	
	/**
	 * 根据文章类型获取文章
	 * @author wujunyuan
	 * @date 2018年12月26日  上午10:30:52
	 * @param request
	 * @param type 1=关于狮盾 2=售后说明  4=用户协议 
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/article")
	public Map<String,Object> article(HttpServletRequest request,Integer type) throws Exception{
		
		return refundService.getArticle(type);
	}
	
	/**
	 * 获取(退货/换货)原因
	 * @author wujunyuan
	 * @date 2018年12月27日  下午5:47:08
	 * @param request
	 * @param status 0=退货原因 1=换货原因
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/reason")
	public Map<String,Object> reason(HttpServletRequest request,Integer status) throws Exception{
		
		return refundService.getReason(status);
	}
	
	/**
	 * 获取售后申请 结算金额 ，退货总价
	 * @author chenluqiang
	 * @date 2019年1月16日 下午4:33:27 
	 * @param request
	 * @param goodsJson 商品数量 与价额信息
	 * @return
	 * @throws Exception
	 */
	@PostMapping("/getRefundMoney")
	public Map<String,Object> getRefundMoney(HttpServletRequest request,String goodsJson) throws Exception{
		//获取用户信息
		User user = (User) CheckUtil.checkOline3(request);
		return refundService.getRefundMoney(user,goodsJson);
	}
}
